package com.tanovo.service;

import com.tanovo.bo.*;
import com.tanovo.domain.*;
import com.tanovo.util.ValidateCodeUtil;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

public interface IUserService {
    /**
     * 用户名密码获取 用户实体
     * @param tokenRequest
     * @return
     */
    User getUserbyTokenReqest(TokenRequest tokenRequest);

    /**
     * 添加一个生成密码的用户
     * @param user
     */
    void addPasswdUser(User user);
    /**
     * 添加原始用户 创建时间 和更新时间都自动生成 删除标志0
     * @param user
     */
    void add(User user);

    void addUserBaseInfo( UserBaseInfo userBaseInfo );


    User getUserById(String userId);

    /**
     * 加密密码
     * @param originPassword
     * @param salt
     * @return
     */
    SecretBo generateSecretPassword(String originPassword, String salt);


    /**
     * 逻辑删除用户
     * @param userIdList
     */
    void deleteByIdList(List<Integer> userIdList);

    /**
     * 用户名+电话搜索查找
     * @param userFindBo
     * @return
     */
    List<UserBaseInfo> listUser(UserFindBo userFindBo);

    /**
     * 获取用户详情
     * @param userId
     * @return
     */
    UserBaseInfo getUserDetail(Integer userId);

    /**
     * 编辑用户
     * @param user
     */
    void updateUser(User user);

    /**
     *用户绑定角色
     * @param userRoleBindBo
     */
    void bindRole(UserRoleBindBo userRoleBindBo);

    /**
     * 解绑角色
     * @param userRoleBindBo
     */
    void deleteRole(UserRoleBindBo userRoleBindBo);

    void restPassword(UserRestBo userRestBo);

    /**
     * 注册安全云平台账号
     * @param userRegisterBo
     */
    void register(UserRegisterBo userRegisterBo);

    /**
     * 通过unionid 获取用户信息
     * @param unionid
     * @return
     */
    User getUserByUnionid(String unionid);

    /**
     * 通过userList查找攻防靶场用户列表
     * @param userIdList
     * @return
     */
    List<UserBaseInfo> getCtfUserList(List<Integer> userIdList);

    /**
     * 添加用户基本信息接口
     * @param userBaseInfoBo
     */
    void addUserInfo(UserBaseInfoBo userBaseInfoBo);

    /**
     * 编辑baseinfo
     * @param user
     */
    void updateUserBaseInfo(UserBaseInfoBo user);

    /**
     * 电话号码查找用户
     * @param phone
     * @return
     */
    User getUserByPhone(String phone);


    /**
     * 初始化绑定超级管理员使用
     * @param userId
     */
    void bindSuperAdminRole(Role superAdmin, Integer userId);

    /**
     * 给公司绑定超级管理员
     * @param company
     */
    void bindSuperAdminToCompany(Company company);

    /**
     * 需要开通应用的用户列表
     * @param user
     * @return
     */
    List<UserBaseInfoBo> userApproveList(UserCore user);

    /**
     * 开通或者禁用 用户应用
     * @param userClientApprove
     */
    void openUserClient(UserClientApproveBo userClientApprove);

    /**
     * 查找个人用户列表
     * @return
     * @param userFindBo
     */
    List<UserBaseInfo> listPersonalUser(UserFindBo userFindBo);

    /**
     * 个人用户绑定到app
     * @param userBindAppBo
     */
    void bindApp(UserBindAppBo userBindAppBo);

    /**
     * 绑定用户角色
     *
     * @param userRole
     */
    void bindRole(UserRole userRole);

    /**
     * 发送注册时的验证码
     * @param phone
     * @param imageCode
     */
    void sendRegisterCode(String phone, String imageCode);

    /**
     * 用户内部注册调用接口
     * @param userInsertBo
     * @return
     */
    InnerRegisterResp userInnerRegister(UserInsertBo userInsertBo);

    void importExcelUser(MultipartFile file, UserCore user);

    /**
     * 电话号码获取图片验证码
     *
     * @param phone
     * @return
     */
    ValidateCodeUtil.Validate getImageCodeByPhone(String phone);
}
